home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #1 / Amiga Plus 1995 #1.iso / fish-disketten / fish_841-850 / d843 / wbrun / 2.0 / wbrun.c < prev    next >
C/C++ Source or Header  |  1994-12-13  |  2KB  |  83 lines

  1. /*
  2.  *    WBRun.c - Copyright © 1990 by S.R. & P.C.
  3.  *
  4.  *    Created:    28 Apr 1991  20:17:57
  5.  *    Modified:    06 Mar 1993  19:47:17
  6.  *
  7.  *    Make>> sc <file>.c
  8.  *    Make>> slink LIB:cs.o <file>.o SC SD ND BATCH QUIET TO <file> LIB LIB:startup.lib
  9.  *    Make>> Protect <file> P ADD
  10.  */
  11.  
  12. #include <libraries/ParMBase.h>
  13. #include <proto/ParM.h>
  14.  
  15. char *Template = "Prog/A,Args/M,STACK/K/N,PRI/K/N,DELAY/K/N";
  16. char *CliHelp = "Usage: WBRun Prog [args] [STACK size] [PRI pri] [DELAY sec]\n";
  17.  
  18. struct ParMBase *ParMBase;
  19.  
  20.  
  21. #define ARG_STACK    2
  22. #define ARG_PRI        3
  23. #define ARG_DELAY    4
  24.  
  25.  
  26. long Main(char *argv[], struct WBStartup *WBenchMsg)
  27. {
  28.     struct Process *pp;
  29.     struct Extended_WBStartup *EWBS = NULL;
  30.     char **args;
  31.     long argl[5];    /* 0 and 1 not used */
  32.     long DefaultStack, i, NumArg=1, err = 20;
  33.     APTR OldWindowPtr;
  34.  
  35.     if (!(ParMBase = (struct ParMBase *)OpenLibrary("parm.library", 6L))) {
  36.         PutStr("Requires parm.library V6");
  37.         return 20;
  38.     }
  39.     pp = (struct Process *)SysBase->ThisTask;
  40.     OldWindowPtr = pp->pr_WindowPtr;
  41.     pp->pr_WindowPtr = (APTR)-1;
  42.     DefaultStack = Cli()->cli_DefaultStack << 2;
  43.  
  44.     /* Init array of long int type arguments */
  45.     for(i=2;i<5;i++)
  46.         argl[i] = (argv[i]) ? *(long *)argv[i] : 0;
  47.     if (argl[ARG_STACK])
  48.         DefaultStack = argl[ARG_STACK];
  49.  
  50.     /* count args */
  51.     if (args = (char **)argv[1]) {
  52.         while(*args++)
  53.             NumArg++;
  54.     }
  55.  
  56.     if (EWBS = AllocWBStartup(NumArg)) {
  57.         if (MakeWBArg(NULL, EWBS->WBStartup.sm_ArgList, argv[0])) {
  58.             if (args = (char **)argv[1]) {
  59.                 i = 1;
  60.                 while(*args) {
  61.                     if (!MakeWBArg(NULL, &EWBS->WBStartup.sm_ArgList[i++], *args++))
  62.                         goto Exit;
  63.                 }
  64.             }
  65.             if (GetTool(NULL, EWBS, DefaultStack)) {
  66.                 WBRunTags(NULL, EWBS, WBRun_Pri, argl[ARG_PRI], TAG_DONE);
  67.                 Delay(argl[ARG_DELAY]*50);
  68.                 err = 0;
  69.             }
  70.         }
  71.     }
  72.  
  73. Exit:
  74.     FreeRepliedWBMessages();
  75.     if (err && EWBS)
  76.         WBFree(EWBS);
  77.     pp->pr_WindowPtr = OldWindowPtr;
  78.     CloseLibrary(ParMBase);
  79.     return err;
  80. }
  81.  
  82.  
  83.